#include <stdio.h>
//图形题
//1️⃣X形图案
//多组输入，一个整数（2~20），表示输出的行数，也表示组成“X”的反斜线和正斜线的长度
//针对每行输入，输出用“*”组成的X形图案。 见牛客网BC68
//eg:输入5
//*---*       01234   *的坐标(0,0)  (0,4)
//-*-*-       01234   *的坐标(1,1)  (1,3)
//--*--       01234   *的坐标(2,2)  (2,2)
//-*-*-       01234   *的坐标(3,1)  (3,3)
//*---*       01234   *的坐标(4,0)  (4,4)
//思路：可以想成二维数组，行为i，列为j
//i==j||i+j=n-1时是*，其余为空格
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int i,j;
        for(i=0;i<n;i++)  //行
        {
            for(j=0;j<n;j++)  //一行中的每个元素，列
            {
                if(i==j||i+j==n-1)
                {
                    printf("*");
                }
                else
                {
                    printf(" ");
                }
            }
            printf("\n");
        }
    }
    return 0;
}
//2️⃣菱形
//eg:2
//--*-       0
//-*-*-      1
//*-*-*-     2
//-*-*-      3
//--*-       4
//第一步确定行的数量为2*n+1
//第二步把行分成3部分，0~n-1，n，n+1~2*n
//第三步把每一行分成两部分，打印空格，之后再打印*
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        //行 n+n+1=2n+1
        int i,j,k;
        for(i=0;i<2*n+1;i++)
        {
            if(i<n)
            {
                //打印空格
                for(j=0;j<n-i;j++)
                {
                    printf(" ");
                }
                //打印*
                for(k=0;k<i+1;k++)  //第一种方式
                {
                    printf("* ");
                }
                printf("\n");
            }
            else if(i>n)
            {
                for(j=0;j<i-n;j++)
                {
                    printf(" ");
                }
                for(k=j;k<=n;k++)  //第二种方式
                {
                    printf("* ");
                }
                printf("\n");
            }
            else
            {
                for(j=0;j<=n;j++)
                {
                    printf("* ");
                }
                printf("\n");
            }
        }
    }
    return 0;
}
